home *** CD-ROM | disk | FTP | other *** search
- // Copyright (C) 1997-2002 Alias|Wavefront,
- // a division of Silicon Graphics Limited.
- //
- // The information in this file is provided for the exclusive use of the
- // licensees of Alias|Wavefront. Such users have the right to use, modify,
- // and incorporate this code into other products for purposes authorized
- // by the Alias|Wavefront license agreement, without fee.
- //
- // ALIAS|WAVEFRONT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- // INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- // EVENT SHALL ALIAS|WAVEFRONT BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- // CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- // DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- // TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- // PERFORMANCE OF THIS SOFTWARE.
- //
- //
- // Alias|Wavefront Script File
- // MODIFY THIS AT YOUR OWN RISK
- //
- // Creation Date: May 16, 2002
- //
- //
- // Description:
- //
- //
- //
- //
-
- global string $updateUIProcs[];
- global string $gPreviousRenderer = "";
-
-
- // Description: Returns a string identifying the current renderer.
- //
- global proc string currentRenderer()
- {
- // If it is not batch rendering, then we want the
- // defaultRenderGlobals.currentRenderer attribute to be created by
- // either the file open process or at the end of the initial Maya loading
- // process. So in this case, we don't want to create it in the
- // currentRenderer() procedure.
- //
- string $curRenderer = "mayaSoftware";
- if(!`attributeExists "currentRenderer" defaultRenderGlobals`)
- {
- if (!`about -batch`)
- {
- // If the attribute defaultRenderGlobals.currentRenderer does
- // not exist yet, then we use "mayaSoftware" as the current
- // renderer.
- //
- return $curRenderer;
- }
-
- // It is batch renderer, we make sure the currentRenderer
- // attribute is created.
- initCurrentRendererDynamicAttr();
- }
- $curRenderer = `getAttr defaultRenderGlobals.currentRenderer`;
-
- return $curRenderer;
-
- }
-
-
- // Description: Sets the currentRenderer attribute to the specified renderer.
- //
- global proc int setCurrentRenderer(string $renderer)
- {
-
- assertIsValidRenderer($renderer);
-
- // Matched. Set attribute and return success
- setAttr "defaultRenderGlobals.currentRenderer" -type "string" $renderer;
- return 1;
-
-
- }
-
- //
- // Description: checks if the currentRenderer exists. Defaults to "mayaSoftware" if it
- // does not
- //
-
- global proc initCurrentRendererDynamicAttr()
- {
- global string $gPreviousRenderer;
-
- // Check if currentRenderer attribute exists in defaultRenderGlobals
- //
- if(!`attributeExists "currentRenderer" defaultRenderGlobals`) {
-
- // Remember if defaultRenderGlobal node is clean or not before
- // the creation and initilization of the currentRenderer dynamic
- // attribute.
- //
- int $defaultRenderGlobalChangedFlag =
- `checkDefaultRenderGlobals -q -changed`;
-
- // Add the dynamic attribute defaultRenderGlobals.currentRenderer.
- //
- addAttr -ln currentRenderer -dt "string" defaultRenderGlobals;
-
- // Set the current renderer to be the preferred renderer (as specified
- // by the user via the Preferences window), so long as that renderer is
- // actually available. If the preferred renderer is not available or
- // not specified, the Maya Software renderer will be used instead.
- //
- string $renderer = "mayaSoftware";
-
- if (`optionVar -exists preferredRenderer`)
- {
- string $prefRenderer;
- $prefRenderer = `optionVar -query preferredRenderer`;
-
- if (`renderer -exists $prefRenderer`)
- {
- // A preferred renderer has been specified by the user and is
- // available, so we will make it the current renderer.
- //
- $renderer = $prefRenderer;
- }
- else
- {
- warning(
- "The preferred renderer, "
- + $prefRenderer
- + ", is not currently available. "
- + "The Maya Software renderer will be used instead.");
- }
- }
-
- // Set the current renderer to the renderer determined above.
- //
- setAttr
- "defaultRenderGlobals.currentRenderer"
- -type "string"
- $renderer;
-
- // Initialize the previous renderer
- //
- $gPreviousRenderer = $renderer;
-
- // Set the clean-ness of the defaultRenderGlobals node back to
- // the state it was in before we created and initiliazed the
- // defaultRenderGlobals.currentRenderer dynamic attribute.
- //
- checkDefaultRenderGlobals -changed $defaultRenderGlobalChangedFlag;
- }
-
- // Verify that the current renderer is actually available.
- // It is possible that we have loaded a new scene in which the current
- // renderer was set to some renderer which is no longer available.
- //
- string $currentRenderer = `getAttr defaultRenderGlobals.currentRenderer`;
-
- if (!`renderer -exists $currentRenderer`)
- {
- warning(
- "The renderer, "
- + $currentRenderer
- + ", used by this scene, is not currently available. "
- + "The Maya Software renderer will be used instead.");
- setAttr
- "defaultRenderGlobals.currentRenderer"
- -type "string"
- "mayaSoftware";
-
- // Initialize the previous renderer
- //
- $gPreviousRenderer = "mayaSoftware";
- }
- }
-
- // Description: called when the currentRenderer attribute is changed
- // All render related UI changes are done here
- //
- global proc int rendererChanged()
- {
- global string $gPreviousRenderer;
-
- if (!`about -batch`)
- {
- if ($gPreviousRenderer != "" && $gPreviousRenderer != currentRenderer())
- {
- // Copy settings from one renderer's render globals to the next.
- //
- copyCommonRenderGlobals($gPreviousRenderer, currentRenderer());
- }
-
- if ((currentRenderer() == "mayaHardware") &&
- (! `hwRender -q -limitedRenderSupport`))
- {
- warning "Graphics card capabilities are insufficient for Harware rendering on this machine.";
- }
- // Do additional UI changes here
- //
- updateRendererUI();
- }
-
- $gPreviousRenderer = currentRenderer();
-
- return 1;
- }
-
- //Description: Used to register an update UI procedure (a proc that updates any
- // renderer specific UI created in that script)
- //Returns: None
- //
- global proc registerUpdateRendererUIProc(string $procName)
- {
- global string $updateUIProcs[];
-
- int $lastIdx = size($updateUIProcs);
- $updateUIProcs[$lastIdx] = $procName;
-
- }
-
-
- // Description: Calls procedures within the UI modules to update their respective
- // renderer related UI
- //
- global proc updateRendererUI()
- {
- // We only update the UI if it actually exists. If we are in batch
- // mode, the UI does not exist.
- //
- if (!`about -batch`)
- {
- global string $updateUIProcs[];
-
- for ($i = 0; $i < size($updateUIProcs); $i++)
- {
- eval $updateUIProcs[$i];
- }
- }
- }
-
- // Description: raises an error if the renderer specified does not exists
- //
- global proc assertIsValidRenderer(string $renderer)
- {
- if(!`renderer -exists $renderer`)
- {
- error -showLineNumber true
- ("Renderer " + $renderer
- + " is not valid");
- }
- }
-
- global proc rendererSceneOpenedCallback()
- {
- //
- // Description:
- // This procedure is called when a scene is opened (which also happens on
- // File->New).
- // This procedure calls procedures which initialize the current renderer
- // attribute and refresh rendering related UI correspondingly.
- //
-
- // Cause the currentRenderer attribute of the defaultRenderGlobals node
- // to be created.
- //
- initCurrentRendererDynamicAttr();
-
- // Set up a scriptJob to react when the value of the
- // attribute changes.
- //
- scriptJob
- -killWithScene
- -attributeChange
- "defaultRenderGlobals.currentRenderer"
- "rendererChanged;";
-
- // Call the rendererChanged() procedure explicitly since the
- // initCurrentRendererDynamicAttr() procedure call above may have changed
- // the current renderer.
- //
- rendererChanged();
- }
-
- //
- // Description: Called when a selection is made in the current renderer option
- // menu. Sets the current renderer.
- //
- // Returns: None
- //
- global proc updateCurrentRendererSel(string $menu)
- {
- string $selRenderer = `optionMenu -query -value $menu`;
- string $renderers[] = `renderer -query -namesOfAvailableRenderers`;
- string $rendererUIName = "";
-
- for ($i = 0; $i < size($renderers); $i += 1)
- {
- $rendererUIName = `renderer -query -rendererUIName $renderers[$i]`;
- if($selRenderer == $rendererUIName)
- break;
- }
-
- // If the select renderer is not installed, produce error
- //
- if($i == size($renderers))
- {
- error -showLineNumber true
- ($rendererUIName + " does not exist ");
- }
- else
- {
- setCurrentRenderer($renderers[$i]);
- }
- }
-
- // Description: This procedure is called to initialize the
- // defaultRenderGlobals.currentRenderer dynamic attribute if it does
- // not exist yet, and set up callbacks for renderer related actions
- // which need to be executed during SceneOpened.
- //
- global proc setupRendererSceneOpenedCallback()
- {
- // Create the defaultRenderGlobals.currentRenderer dynamic attribute
- // if it does not exist yet.
- //
- initCurrentRendererDynamicAttr();
-
- // Invoke the scene opened callback explicitly, since the event has already
- // occurred by the time this script is sourced during Maya startup. We want
- // everything that procedure does to also happen during startup.
- //
- evalDeferred rendererSceneOpenedCallback;
-
- // Set up a script job to call the scene opened callback whenever a new scene
- // is opened.
- //
- evalDeferred "scriptJob -event SceneOpened rendererSceneOpenedCallback;";
- }
-